home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / M2 / LISTS.MOD < prev    next >
Text File  |  2000-09-26  |  2KB  |  72 lines

  1. IMPLEMENTATION MODULE Lists;
  2.  
  3. FROM SYSTEM IMPORT ADDRESS;
  4.  
  5. PROCEDURE AddHead(list : ListPtr; entry : NodePtr);
  6. BEGIN
  7.  entry^.nextEntry := list^.firstEntry;
  8.  entry^.prevEntry := NIL;
  9.  entry^.list      := list;
  10.  IF (list^.firstEntry # NIL) THEN
  11.   list^.firstEntry^.prevEntry := entry;
  12.  ELSE
  13.   list^.lastEntry := entry;
  14.  END (* IF *);
  15.  list^.firstEntry := entry;
  16. END AddHead;
  17.  
  18. PROCEDURE AddTail(list : ListPtr; entry : NodePtr);
  19. BEGIN
  20.  entry^.list := list;
  21.  IF (list^.lastEntry # NIL) THEN
  22.   list^.lastEntry^.nextEntry := entry;
  23.   entry^.prevEntry := list^.lastEntry;
  24.   entry^.nextEntry := NIL;
  25.  ELSE
  26.   list^.firstEntry := entry;
  27.   list^.lastEntry := entry;
  28.   entry^.prevEntry := NIL;
  29.   entry^.nextEntry := NIL;
  30.  END (* IF *);
  31. END AddTail;
  32.  
  33. PROCEDURE NewList(list : ListPtr);
  34. BEGIN
  35.  list^.firstEntry := NIL;
  36.  list^.lastEntry  := NIL;
  37. END NewList;
  38.  
  39. PROCEDURE Remove(entry : NodePtr);
  40. BEGIN
  41.  IF (entry^.nextEntry # NIL) THEN
  42.   IF (entry^.prevEntry # NIL) THEN
  43.    entry^.prevEntry^.nextEntry := entry^.nextEntry;
  44.    entry^.nextEntry^.prevEntry := entry^.prevEntry;
  45.   ELSE
  46.    entry^.list^.firstEntry := entry^.nextEntry;
  47.    IF (entry^.list^.firstEntry^.nextEntry=NIL) THEN
  48.     entry^.list^.lastEntry := entry^.list^.firstEntry;
  49.    END (* IF *);
  50.   END (* IF *);
  51.  ELSE
  52.   IF (entry^.prevEntry # NIL) THEN
  53.    entry^.prevEntry^.nextEntry := NIL;
  54.   ELSE
  55.    entry^.list^.firstEntry := NIL;
  56.    entry^.list^.lastEntry  := NIL;
  57.   END (* IF *);
  58.  END (* IF *);
  59. END Remove;
  60.  
  61. PROCEDURE GetNext(node : NodePtr) : ADDRESS;
  62. BEGIN
  63.  RETURN(node^.nextEntry);
  64. END GetNext;
  65.  
  66. PROCEDURE GetPrev(node : NodePtr) : ADDRESS;
  67. BEGIN
  68.  RETURN(node^.prevEntry);
  69. END GetPrev;
  70.  
  71. END Lists.
  72.